<ul>
<li>尽可能地使用最有效(最小)的数据类型。</li>
<li>尽可能使用较小的整数类型使表更小。</li>
<li>如果可能，声明列为NOT NULL。避免使用NULL</li>
<li>在一些情形下，将一个经常被扫描的表分割为2个表是有益的。特别是如果它是一个动态格式的表，并且可能使用一个扫描表时能用来找出相关行的较小静态格式的表。</li>
<li><p >对于使用频率非常高，但实时性要求不高的查询，可是创建一个汇总表，定时更新，查询时直接从汇总表中查询数据，而不从更大的原始表中查询数据。</p>

<p >例如，网站上很多地方要显示最近一周或一月的数据，你可以把一周或一月的数据创建出一个汇总表。然后每天更新一次这个表。或者新增数据在插入原始表的同时也向汇总表插入一份，每天执行一次从汇总表中删除过期数据的工作就可以了。</p></li>
<li><p >在一些情况下，基于来自其它列的信息引入一个“ 哈希”的列有意义。如果该列较短并且有合理的唯一值，它可以比在许多列上的一个大索引快些。在MySQL中，很容易使用这个额外列：</p>

<p >SELECT * FROM tbl_name  WHERE hash_col=MD5(CONCAT(col1,col2))  AND col1='constant' AND col2='constant';</p></li>
<li><p >如果你需要很经常地计算结果，例如基于来自很多行的信息的计数，引入一个新表并实时更新计数器可能更好一些。下面形式的更新会更快一些：</p>

<p >UPDATE tbl_name SET count_col=count_col+1 WHERE key_col=constant;</p></li>
<li><p >如果你需要从大的记录文件表中收集统计信息，使用总结性的表而不是扫描整个表。维护总结应该比尝试做“实时”统计要快些。当有变化时从日志重新生成新的总结表比改变运行的应用(取决于业务决策)要快得多。</p></li>
<li>如果可能，应该将报告分类为“实时”或“统计”，这里统计报告所需的数据仅仅基于从实际数据定期产生的总结表中产生。</li>
<li>充分利用列有默认值的事实。只有当插入的值不同于默认值时，才明确地插入值。这减少MySQL需要做的语法分析从而提高插入速度。</li>
<li>当使用MyISAM引擎时，偶尔使用OPTIMIZE TABLE可以避免碎片。参见15.1.3节，“MyISAM表的存储格式”。</li>
<li>对于5.1中的InnoDB引擎，使用：ROW_FORMAT=COMPACT，这样的话utf8表可以自适应内容的空间，否则的话 CHAR(n)占用3*n字节 </li>
</ul>
